#!/bin/bash

appId="1111"
chatId="chatced4e6204ebdeaac3a4f7cfd865ef61a"
url='http://uatdingtalk.yundasys.com:9091/groupMsg/sendTextMsgByAppId'
max_send_limit=4950

sql_res=`mysql -u'root' -p'root' 'meien'  -s -e "select * from foo"`

IFS_old=$IFS      # 记录老的分隔符
IFS=$'\n'         # 以换行符作为分隔符

## 遍历
#for loop in $sql_res
#do
#	IFS=$'\t'  # 以制表符作为分隔符
#	arr=($loop) # 初始化数组
#	
#	#err_msg="慢查询：${arr[1]}(${arr[0]}s)" # 需要发送的通知信息
#	err_msg=${arr[1]}
#	echo "消息长度：${#err_msg}"
#	request_data="{'appId':'"$appId"','chatId':'"$chatId"','content':'"$err_msg"'}" # 消息体
#	response_data=`curl -H "Content-Type: application/json" -s -X POST -d $request_data $url` # 响应值
#	echo $response_data 
#done
#
#IFS=$IFS_old # 恢复


for loop in $sql_res
do
	IFS=$'\t'  # 以制表符作为分隔符
	arr=($loop) # 初始化数组
    #如果字符不超过钉钉最大推送字符，就直接推送（钉钉推送消息最长只能5000字符）
	sql_length=${#arr[1]} # 需要推送sql长度
	if [ $sql_length -lt $max_send_limit ];then
            
	    err_msg="慢查询：${arr[1]}(${arr[0]}s)" # 需要发送的通知信息
	    request_data="{'appId':'$appId','chatId':'$chatId','content':'$err_msg'}" # 消息体
        response_data=`curl -H "Content-Type: application/json" -s -X POST -d $request_data $url` # 响应值
	    echo -e "【响应值】：$response_data"

	else

	    # 超过最大传输字符，则分段推送
	    cycle=`expr $sql_length / $max_send_limit`
	    echo -e "【sql超长，需要分段推送】：段数为$(($cycle + 1))"
	    
	    for((i=0;i<=$cycle;i++));
	    do
		
		itc_start=`expr $i \* $max_send_limit` # itc即intercept
		itc_str="${arr[1]:$itc_start:$max_send_limit}"
		# 如果需要推送的sql长度超过max_send_limit同时又是它的整数倍，则会导致最后一条推送信息为空
		if [ ${#itc_str} -gt 0 ];then
			
		    err_msg="$itc_str(no${i})"
		    request_data="{'appId':'$appId','chatId':'$chatId','content':'$err_msg'}" # 消息体
                    response_data=`curl -H "Content-Type: application/json" -s -X POST -d $request_data $url` # 响应值
                    echo -e "【第${i}段响应值】：$response_data"
		fi
		
	    done

	fi

done

IFS=$IFS_old # 恢复
